# Contributor: Oliver Smith <ollieparanoid@postmarketos.org>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=linux-firmware
pkgver=20200519
pkgrel=1
pkgdesc="firmware files for linux"
#url="https://git.kernel.org/?p=linux/kernel/git/dwmw2/linux-firmware.git;a=summary"
url="http://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git;a=summary"
arch="all"
license="custom:multiple"
makedepends=
install=""
provides="linux-firmware-any"
provider_priority=1
options="!strip !check !archcheck !tracedeps !spdx"

_rpi_bt=fff76cb15527c435ce99a9787848eacd6288282c

# cypress fmac: https://community.cypress.com/docs/DOC-19375
source="https://dev.alpinelinux.org/archive/$pkgname/$pkgname-${pkgver}.tar.gz
	https://community.cypress.com/servlet/JiveServlet/download/19375-1-53475/cypress-fmac-v5.4.18-2020_0402.zip
	BCM43430A1.hcd.${_rpi_bt::8}::https://github.com/RPi-Distro/bluez-firmware/raw/$_rpi_bt/broadcom/BCM43430A1.hcd
	BCM4345C0.hcd.${_rpi_bt::8}::https://github.com/RPi-Distro/bluez-firmware/raw/$_rpi_bt/broadcom/BCM4345C0.hcd
	"

_giturl="git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git"
_upload=dev.alpinelinux.org:/archive/$pkgname/

_builddir="$srcdir"/$pkgname-$pkgver

# Put /lib/firmware/* folders in subpackages
_folders="3com acenic adaptec advansys amd amd-ucode amdgpu ar3k ath10k ath6k
	ath9k_htc atmel atusb av7110 bnx2 bnx2x brcm cadence cavium cis cpia2 cxgb3
	cxgb4 dabusb dpaa2 dsp56k e100 edgeport emi26 emi62 ene-ub6250 ess go7007 i915
	imx inside-secure intel isci kaweth keyspan keyspan_pda korg libertas liquidio matrox
	mediatek mellanox meson microchip moxa mrvl mwl8k mwlwifi myricom netronome
	nvidia ositech qca qcom qed qlogic r128 radeon rockchip rsi rtl8192e rtl_bt
	rtl_nic rtlwifi rtw88 sb16 slicoss sun sxg tehuti ti-connectivity ti-keystone
	tigon ttusb-budget ueagle-atm vicam vxge yam yamaha"

subpackages="$pkgname-other::noarch $pkgname-none::noarch"
depends="linux-firmware-other=$pkgver-r$pkgrel"
for i in $_folders; do
	subpackages="$pkgname-$i:_folder:noarch $subpackages"
	depends="$pkgname-$i=$pkgver-r$pkgrel $depends"
done

snapshot() {
	local _date=$(date +%Y%m%d)
	local _pkg=$pkgname-$_date.tar.gz
	mkdir -p "$srcdir"
	cd "$srcdir"
	rm -rf "$pkgname"
	git clone --depth=1 --bare $_giturl
	git --git-dir ${_giturl##*/} archive -o $_pkg \
		--prefix=$pkgname-$_date/ HEAD
	msg "New snapshot: $_pkg"
	if [ -n "$_upload" ]; then
		msg "Uploading to $_upload"
		scp $_pkg $_upload && abump $pkgname-$_date
	fi
}

package() {
	cd "${_builddir}"
	make DESTDIR="${pkgdir}" FIRMWAREDIR="/lib/firmware" install

	# add compat links for pre-5.0 kernel
	ln -s brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt "$pkgdir"/lib/firmware/brcm/brcmfmac43455-sdio.txt
	ln -s brcmfmac43430-sdio.raspberrypi,3-model-b.txt      "$pkgdir"/lib/firmware/brcm/brcmfmac43430-sdio.txt

	# https://gitlab.alpinelinux.org/alpine/aports/issues/11408
	ln -s brcmfmac43430-sdio.raspberrypi,3-model-b.txt      "$pkgdir"/lib/firmware/brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.txt


	local fw; for fw in $source; do
		local _f=${fw%::*}
		case $_f in
		*.hcd*)
			install -Dm 644 $srcdir/$_f \
				"$pkgdir"/lib/firmware/brcm/"${_f%.*}"
			;;
		*.zip)
			unzip -p $srcdir/${fw##*/} "cypress-firmware-*.tar.gz" | \
				tar xzv -C "$pkgdir"/lib/firmware/brcm/ \
					--wildcards --strip-components=1 --no-same-owner \
					"*.bin" "*.clm_blob"
			;;
		esac
	done

	rm -f "${pkgdir}/usr/lib/firmware/{Makefile,README,configure,GPL-3}"

	find "${pkgdir}" \( -name '*.S' -or -name '*.asm' -or \
		-name '*.c' -or -name '*.h' -or -name '*.pl' -or \
                -name 'Makefile' \) -exec rm -- {} \;
}

_folder() {
	local folder=${subpkgname##linux-firmware-}
	pkgdesc="firmware files for linux ($folder folder)"
	depends=""
	provides="linux-firmware-any"
	provider_priority=

	# Move /lib/firmware/$folder (case insensitive)
	mkdir -p "$subpkgdir/lib/firmware"
	mv "$(find "$pkgdir/lib/firmware" -iname "$folder" -type d)" \
		"$subpkgdir/lib/firmware"
}

other() {
	# Requires subfolders to be split in subpackages
	local leftover=""
	local i
	for i in "$pkgdir"/lib/firmware/*; do
		[ -d "$i" ] && leftover="$leftover $(basename $i)"
	done
	if [ "$leftover" != "" ]; then
		local fixed
		error "Not all subfolders have been moved to subpackages!"
		error "Fix this by adjusting _folders as follows:"
		fixed="$(echo $_folders$leftover | tr " " "\n" | tr '[A-Z]' '[a-z]' | sort)"
		echo "_folders=\"$(printf "$fixed" | tr "\n" " ")\"" | fold -s
		return 1
	fi

	# Move /lib/firmware (which doesn't have subfolders now)
	pkgdesc="firmware files for linux (uncategorized)"
	depends=""
	provides="linux-firmware-any"
	provider_priority=
	mkdir -p "$subpkgdir"/
	mv "$pkgdir"/lib "$subpkgdir"/
}

none() {
	# dummy package with no firmware
	pkgdesc="Empty linux firwmare package for those who does not need any firmware"
	provider_priority=
	provides="linux-firmware-any"
	depends=
	mkdir -p "$subpkgdir"
}


sha512sums="9724cf3d1aea73f264d53564ef160a62e90bb35766f3300bbbeaf7c7c6a356ef50c7d17bfa01197e8e991ff72b1aeef002bb78f5dc78243b2792cafbf1139dff  linux-firmware-20200519.tar.gz
d3d976799f43b3b344305959b10d220709f6881cec102dfe391347869748f76d517d1b0d31076e2baa9759cb6a622eb5fc6f4fe45d6d3151974725e254255afa  cypress-fmac-v5.4.18-2020_0402.zip
a7b37bce092367125e390017bb0329c3b7f8fa891cf30d422ee73ce53d0592d4ff0fc2e2a94a87eefb641d5dd8631fae1cc46664224dea987ca04b68a8af8519  BCM43430A1.hcd.fff76cb1
a52fdb876131affa85b39434d619580c0e1605094992ffa3bb321af387dd79739736842dea9ffa759e6658aecde40eda6b06d93dbb58234a4b126b756c28521e  BCM4345C0.hcd.fff76cb1"
